//实现栈
public class ArrayStack {
    private String[] stack;  // 存储栈元素的数组
    private int top;         // 栈顶指针
    private int size;    // 栈的容量

    // 构造函数，初始化栈的容量
    public ArrayStack(int size) {
        this.stack = new String[size];
        this.size = size;
        this.top = -1; // 初始化时栈为空
    }

    // 弹栈，返回栈顶元素
    public String pop() {
        if (isEmpty()) {
            return null; // 栈为空，无法弹出
        }
        return stack[top--]; // 返回栈顶元素并更新栈顶指针
    }

    // 压栈栈，返回成功与否
    public boolean push(String element) {
        if (isFull()) {
            return false; // 栈满，无法压入新元素
        }
        stack[++top] = element; // 将元素压入栈顶并更新指针
        return true;
    }

    // 查找，返回是否存在
    public boolean search(String element) {
        for (int i = 0; i <= top; i++) {
            if (stack[i].equals(element)) {
                return true; // 找到元素，返回true
            }
        }
        return false; // 未找到，返回false
    }

    // 判断栈是否为空
    public boolean isEmpty() {
        return top == -1;
    }

    // 判断栈是否满
    public boolean isFull() {
        return top == size - 1;
    }

    // 测试栈的方法
    public static void main(String[] args) {
        ArrayStack myStack = new ArrayStack(5); // 创建容量为5的栈

        // 测试压栈
        System.out.println("Push 'Hello': " + myStack.push("Hello")); // 返回true
        System.out.println("Push 'World': " + myStack.push("World")); // 返回true
        System.out.println("Push 'Java': " + myStack.push("Java"));   // 返回true

        // 测试查找
        System.out.println("Search 'World': " + myStack.search("World")); // 返回true
        System.out.println("Search 'C++': " + myStack.search("C++"));     // 返回false

        // 测试弹栈
        System.out.println("Pop: " + myStack.pop()); // 返回 'Java'
        System.out.println("Pop: " + myStack.pop()); // 返回 'World'
        System.out.println("Pop: " + myStack.pop()); // 返回 'Hello'
        System.out.println("Pop: " + myStack.pop()); // 返回 null（栈空）
    }
}
